package org.lanqiao.db;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class DBDriver {

	/**
	 * 获取数据库连接对象
	 * @return 数据库连接对象
	 */
	public Connection getConn(){
        //数据连接对象--默认值null
		Connection conn=null;
		try {
			//1、注册驱动：需要使用数据库驱动类型、数据服务器访问地址、用户名、密码
			//读取数据库的配置文件
			InputStream is=this.getClass().getClassLoader().getResourceAsStream("db.properties");
			//创建java.util保重的工具类Properties--该类用于读取Properties类型的配置文件的信息
			Properties prop=new Properties();
			//加载被读取的文件
			prop.load(is);
			//数据库驱动类型
			String dbDriverType=prop.getProperty("dbDriverType");
			//数据服务器访问地址
			/*
			 * jdbc:oracle:thin:@127.0.0.1:1521:dbname
			 * 中：127.0.0.1表示数据库服务器在本机；也可以使用localhost替代；还可以ip地址、主机名
			 * 1521是Oracle客户端连接的监听端口；
			 * dbname是Oracle数据库的实例名，一般默认是实例名ORCL
			 */
			String dbURL=prop.getProperty("dbURL");
			//用户名
			String dbUser=prop.getProperty("dbUser");
			//密码
			String dbPSW=prop.getProperty("dbPSW");
			//使用反射机制注册数据库服务驱动
			Class.forName(dbDriverType).newInstance();
			//2、获取数据连接对象：connection
			conn=DriverManager.getConnection(dbURL,dbUser,dbPSW);
		} catch (Exception e) {
			System.out.println("Oracle-Jdbc:数据库连接异常");
			e.printStackTrace();
		}
		return conn;
	}
	
	
	
	/**
	 * 数据库查询操作
	 * @param strSql 查询操作sql语句
	 * @return  查询结果集
	 */
	public ResultSet query(String strSql){
		//返回结果集
		ResultSet rs=null;
		try {
			//3、获取数据库操作对象：statement(preparedstatement)
			Statement st=getConn().createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
			
			//5、执行数据操作处理
			rs=st.executeQuery(strSql);
		} catch (Exception e) {
			System.out.println("Oracle-Jdbc:数据库查询异常");
			e.printStackTrace();
		}
		return rs;
	}
	
	
	/**
	 * 关闭数据库连接
	 * @param conn
	 *             被关闭的数据连接对象
	 */
	public void closeConn(Connection conn){
		try {
			//7、关闭资源
			if(conn!=null){
				conn.close();
			}
		} catch (SQLException e) {
			// 数据库关闭异常
			System.out.println("Oracle-Jdbc:数据库连接关闭异常");
			e.printStackTrace();
		}
	}
}
